/* *****************************************************************************
 * Copyright (c) Huawei Technologies Co., Ltd. 2015-2022. All rights reserved.
 ******************************************************************************
  File name: Smf_cache_type.h
  Version No.: Draft
  Generation date: September 1,: 2015
  Latest modification:
  Function Description: Smf_cache_type.h header file
  Function list:
  Modification history:
  1. Date: September 1,: 2015
    Modify content: Create a file.

***************************************************************************** */

#ifndef SMF_CACHE_TYPE_H
#define SMF_CACHE_TYPE_H


#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */
/*
                  extended API head for cache mode
     3                   2                   1                   0
   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   src   |instance_id|  op_id  |A|   |O|F|S|b|  offset   | Size| F:FI_S; b:bev
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |              CID                      |Csi|Tag_Typ|Sub|Vcache_| Csi:Csize; Tag_Typ:Tag_Type; Sub:Sub_Type;
  Vcache_:Vcache_sel
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   mem_index(Tag.data)                         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   mem_index(Tag.data)                         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            GPA                                |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            GPA                                |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          byte_enable                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          byte_enable                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      extended API head for cache mode for WQE and bpc access
     3                   2                   1                   0
   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   src   |instance_id|  op_id  |A|   |O|F|S|b|  offset   | Size| F:FI_S; b:bev
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                           |PCIE_Temple|Csi|Tag_Typ|Sub|Vcache_| PCIE_Temple:PCIE_Templete; Csi:Csize;
  Tag_Typ:Tag_Type; Sub:Sub_Type; Vcache_:Vcache_sel
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   mem_index(Tag.data)                         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   mem_index(Tag.data)                         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            GPA                                |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            GPA                                |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          byte_enable                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          byte_enable                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/

/*
How to use the extended API head for cache mode:
The value of tag_type: is SMF_CACHE_TAG_TYPE_XXX.
sub_type:
   If tag_type is set to SMF_CACHE_TAG_TYPE_P_CXT_RDMA, sub_type is set to SMF_CACHE_TAG_SUB_TYPE_VF_XID.
   If tag_type is set to SMF_CACHE_TAG_TYPE_P_CXT_FT, sub_type is set to SMF_CACHE_TAG_SUB_TYPE_VF_XID/FP/GPA.
   If tag_type is set to SMF_CACHE_TAG_TYPE_xxx_WQE, sub_type is set to SMF_CACHE_TAG_SUB_TYPE_SQ_WQE/RQ_WQE.
   If tag_type is set to other values, the value of sub_type is fixed to 0.
*/
typedef enum {
    SMF_CACHE_TAG_TYPE_P_CXT_FT = 0,
    SMF_CACHE_TAG_TYPE_P_CXT_RDMA = 1,
    SMF_CACHE_TAG_TYPE_L2NIC_WQE = 2,
    SMF_CACHE_TAG_TYPE_RDMA_WQE = 3,

    SMF_CACHE_TAG_TYPE_XOE_WQE = 4,
    SMF_CACHE_TAG_TYPE_MPT = 5,
    SMF_CACHE_TAG_TYPE_SRQN = 6,
    SMF_CACHE_TAG_TYPE_CQN = 7,

    SMF_CACHE_TAG_TYPE_C_CXT = 8,
    SMF_CACHE_TAG_TYPE_L3I = 9,
    SMF_CACHE_TAG_TYPE_HASH_BUCKET = 0xA,
    SMF_CACHE_TAG_TYPE_RDMA_GID = 0xB,

    SMF_CACHE_TAG_TYPE_LUN = 0xC,
    SMF_CACHE_TAG_TYPE_TIMER = 0xD,
    SMF_CACHE_TAG_TYPE_CID = 0xE,
    SMF_CACHE_TAG_TYPE_GPA = 0xF,
} smf_cache_tag_type_e;

typedef enum {
    SMF_CACHE_TAG_SUB_TYPE_DEFAULT = 0,

    SMF_CACHE_TAG_SUB_TYPE_VF_XID = 0,
    SMF_CACHE_TAG_SUB_TYPE_FP = 1,
    SMF_CACHE_TAG_SUB_TYPE_GPA = 2,

    SMF_CACHE_TAG_SUB_TYPE_SQ_WQE = 0,
    SMF_CACHE_TAG_SUB_TYPE_RQ_WQE = 1,
} smf_cache_tag_sub_type_e;


typedef enum {
    SMF_RDMA_VIRTUAL_CACHE_QPC = 0,
    SMF_RDMA_VIRTUAL_CACHE_MPT = 1,
    SMF_RDMA_VIRTUAL_CACHE_SQ_WQE = 2,
    SMF_RDMA_VIRTUAL_CACHE_RQ_WQE = 3,

    SMF_RDMA_VIRTUAL_CACHE_CQC_SRQC = 4,
    SMF_RDMA_VIRTUAL_CACHE_GID = 4, // The virtual cache and CQC & SRQC of the GID are the same.

    SMF_RDMA_VIRTUAL_CACHE_RDMARC = 5,
    SMF_RDMA_VIRTUAL_CACHE_DMTT = 6,
    SMF_RDMA_VIRTUAL_CACHE_CMTT = 7,
} smf_rdma_virtual_cache_e;


typedef enum {
    SMF_L2NIC_VIRTUAL_CACHE_SQ_CMDQ_WQE = 0,
    SMF_L2NIC_VIRTUAL_CACHE_RQ_WQE = 1,
} smf_l2nic_virtual_cache_e;


#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */


#endif /* SMF_CACHE_TYPE_H */
